package com.nus.database;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;

public class DBAdaptor {
	public static final String KEY_id = "_id";
    public static final String KEY_REMAINDER_DATA1 = "data1";
    public static final String KEY_REMAINDER_DATA2 = "data2";
    public static final String KEY_TIMESTAMP="timestamp";
      
    private static final String TAG = "DBAdapter";
    
    private static final String DATABASE_NAME = "Remainders";
    private static final String DATABASE_TABLE = "information";
    private static final int DATABASE_VERSION = 1;

    private static final String DATABASE_CREATE =
        "create table information (_id integer primary key autoincrement, "
        + "data1 text not null, data2 text not null, timestamp integer);"; 
        
    private final Context context; 
    
    private DatabaseHelper DBHelper;
    private SQLiteDatabase db;

    public DBAdaptor(Context ctx) 
    {
        this.context = ctx;
        DBHelper = new DatabaseHelper(context);
    }
        
    private static class DatabaseHelper extends SQLiteOpenHelper 
    {
        DatabaseHelper(Context context) 
        {
            super(context, DATABASE_NAME, null, DATABASE_VERSION);
        }

        @Override
        public void onCreate(SQLiteDatabase db) 
        {
            db.execSQL(DATABASE_CREATE);
        }

        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, 
        int newVersion) 
        {
            Log.w(TAG, "Upgrading database from version " + oldVersion 
                    + " to "
                    + newVersion + ", which will destroy all old data");
            db.execSQL("DROP TABLE IF EXISTS information");
            onCreate(db);
        }
    }    
    
    //---opens the database---
    public DBAdaptor open() throws SQLException 
    {
        db = DBHelper.getWritableDatabase();
        return this;
    }

    //---closes the database---    
    public void close() 
    {
        DBHelper.close();
    }
    
    //---insert a title into the database---
    public long insertRemainder(String data1, String data2, Long timestamp) 
    {
        ContentValues initialValues = new ContentValues();
        initialValues.put(KEY_REMAINDER_DATA1, data1);
        initialValues.put(KEY_REMAINDER_DATA2, data2);
        initialValues.put(KEY_TIMESTAMP, timestamp);
        return db.insert(DATABASE_TABLE, null, initialValues);
    }

    //---deletes a particular title---
    public boolean deleteRemainder(long timestamp) 
    {
        return db.delete(DATABASE_TABLE, KEY_TIMESTAMP + 
        		"=" + timestamp, null) > 0;
    }

    //---retrieves all the titles---
    public Cursor getAllRemainders() 
    {
        return db.query(DATABASE_TABLE, new String[] {
        		KEY_id, 
        		KEY_REMAINDER_DATA1,
        		KEY_REMAINDER_DATA2,
                KEY_TIMESTAMP}, 
                null, 
                null, 
                null, 
                null, 
                null);
    }

    //---retrieves a particular title---
    public Cursor getRemainder(long timestamp) throws SQLException 
    {
        Cursor mCursor =
                db.query(true, DATABASE_TABLE, new String[] {
                		KEY_id,
                		KEY_REMAINDER_DATA1, 
                		KEY_REMAINDER_DATA2,
                		KEY_TIMESTAMP
                		}, 
                		KEY_TIMESTAMP + "=" + timestamp, 
                		null,
                		null, 
                		null, 
                		null, 
                		null);
        if (mCursor != null) {
            mCursor.moveToFirst();
        }
        return mCursor;
    }

    //---updates a title---
//    public boolean updateTitle(long rowId, String isbn, 
//    String title, String publisher) 
//    {
//        ContentValues args = new ContentValues();
//        args.put(KEY_ISBN, isbn);
//        args.put(KEY_TITLE, title);
//        args.put(KEY_PUBLISHER, publisher);
//        return db.update(DATABASE_TABLE, args, 
//                         KEY_ROWID + "=" + rowId, null) > 0;
//    }

}
